package com.prd.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.prd.dto.EntMeetDto;
import com.prd.dto.MatterDto;
import com.prd.dto.SummaryVoteDto;
import com.prd.model.EntInvite;
import com.prd.model.EntMeet;
import com.prd.model.EntMeetSign;
import com.prd.vo.EntMeetVo;
import com.prd.vo.MatterVo;
import com.prd.vo.MeetPresentVo;

import java.util.List;

public interface EntMeetService extends IService<EntMeet> {

    /**
     * 添加
     *
     * @param entMeet
     * @return
     */
    int insertEntMeet(EntMeet entMeet);

    /**
     * 修改
     *
     * @param entMeet
     * @return
     */
    int updateEntMeet(EntMeet entMeet);

    /**
     * 查询
     *
     * @param entMeetDto
     * @return
     */
    List<EntMeetVo> listInfo(EntMeetDto entMeetDto);

    /**
     * 我要签到
     *
     * @param id
     * @return
     */
    int signIn(Long id);

    /**
     * 取消会议
     *
     * @param id
     * @return
     */
    int cancelMeet(Long id);

    /**
     * 添加邀请外部人员
     *
     * @param inviteList
     * @return
     */
    int outside(List<EntInvite> inviteList);

    /**
     * 签离
     *
     * @param id
     * @return
     */
    int visa(Long id);

    /**
     * 会议记录及事项决议
     *
     * @param matterDto
     * @return
     */
    int addMatter(MatterDto matterDto);

    /**
     * 会议请假
     *
     * @param id
     * @return
     */
    int leave(Long id);

    /**
     * 会议开始
     *
     * @param id
     * @return
     */
    int start(Long id);

    /**
     * 结束会议
     *
     * @param id
     * @return
     */
    int conclude(Long id);

    /**
     * 查询会议记录及事项决议
     *
     * @param meetId
     * @return
     */
    MatterVo listMatter(Long meetId);

    /**
     * 查询详细信息
     *
     * @param id
     * @return
     */
    EntMeet detail(Long id);

    /**
     * 查询会议人员权限
     *
     * @param meetId
     * @return
     */
    JSONArray jurisdiction(Long meetId);

    /**
     * 添加决议投票人员
     *
     * @param summaryVoteDto
     * @return
     */
    int addSummaryVote(SummaryVoteDto summaryVoteDto);

    /**
     * 添加决议上报审批人
     *
     * @param meetId         会议ID
     * @param summaryApprove 上报审批人
     * @return
     */
    int addSummaryAppear(Long meetId, String summaryApprove);

    /**
     * 添加会议内部参会人员
     *
     * @param meetId
     * @param interiorPersonnel
     * @return
     */
    int addMeetInterior(Long meetId, String interiorPersonnel);

    /**
     * 添加会议外部参会人员
     *
     * @param meetId
     * @param externalPersonnel
     * @return
     */
    int addMeetExternal(Long meetId, String externalPersonnel);

    /**
     * 查询会议出席情况
     *
     * @param meetId
     * @param type   1：应出席人、2：实际出席、3：未到/缺席、4：迟到、5：早退、6：会议请假
     * @return
     */
    List<MeetPresentVo> listMeetPresent(Long meetId, Integer type);

}
